@delorenj/mcp-server-trello 0.3.0 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +276 -44
- package/build/evals/evals.d.ts +1 -1
- package/build/evals/evals.js +37 -15
- package/build/evals/evals.js.map +1 -1
- package/build/get-card-implementation.d.ts +122 -0
- package/build/get-card-implementation.js +225 -0
- package/build/get-card-implementation.js.map +1 -0
- package/build/index.js +1 -500
- package/build/index.js.map +1 -1
- package/build/rate-limiter.js +1 -1
- package/build/rate-limiter.js.map +1 -1
- package/build/trello-client.d.ts +19 -12
- package/build/trello-client.js +223 -21
- package/build/trello-client.js.map +1 -1
- package/build/types.d.ts +115 -1
- package/build/validators.d.ts +22 -0
- package/build/validators.js +46 -1
- package/build/validators.js.map +1 -1
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -1,16 +1,50 @@
|
|
|
1
|
-
[](https://mseep.ai/app/delorenj-mcp-server-trello)
|
|
2
|
-
|
|
3
1
|
# MCP Server Trello
|
|
4
|
-
[](https://smithery.ai/server/@modelcontextprotocol/mcp-server-trello)
|
|
5
2
|
|
|
6
|
-
|
|
3
|
+
[](https://mseep.ai/app/27359682-7632-4ba7-981d-7dfecadf1c4b)
|
|
7
4
|
|
|
8
5
|
<a href="https://glama.ai/mcp/servers/klqkamy7wt"><img width="380" height="200" src="https://glama.ai/mcp/servers/klqkamy7wt/badge" alt="Server Trello MCP server" /></a>
|
|
9
6
|
|
|
7
|
+
A Model Context Protocol (MCP) server that provides tools for interacting with Trello boards. This server enables seamless integration with Trello's API while handling rate limiting, type safety, and error handling automatically.
|
|
8
|
+
|
|
9
|
+
## 🎉 New in v1.1.0: Complete Card Data Extraction!
|
|
10
|
+
|
|
11
|
+
**The `get_card` tool is here!** 🚀 Now you can fetch comprehensive Trello card data with human-level parity. Get everything you see in the Trello UI - checklists, attachments, labels with details, members, comments, and more - all formatted in beautiful markdown or structured JSON!
|
|
12
|
+
|
|
10
13
|
## Changelog
|
|
11
14
|
|
|
15
|
+
### 1.1.0
|
|
16
|
+
|
|
17
|
+
**🎊 Major Feature Release: Complete Card Data Extraction**
|
|
18
|
+
|
|
19
|
+
- Added powerful `get_card` tool for comprehensive single card data retrieval
|
|
20
|
+
- **Enhanced Data Extraction:**
|
|
21
|
+
- ✅ **Checklists** - Full checklist support with items, completion states, member assignments, and due dates
|
|
22
|
+
- 📎 **Attachments** - Complete attachment data including images, previews, file metadata, and inline image detection
|
|
23
|
+
- 🏷️ **Labels** - Full label details (names and colors, not just IDs)
|
|
24
|
+
- 👥 **Members** - Card member assignments with full profile information
|
|
25
|
+
- 💬 **Comments** - Card activity and comment history
|
|
26
|
+
- 📊 **Badges** - Statistics including checklist progress, comment counts, and attachment counts
|
|
27
|
+
- 🎨 **Cover Images** - Card cover image support
|
|
28
|
+
- 📍 **Context** - Board and list information for complete context
|
|
29
|
+
- 🔧 **Custom Fields** - Support for board-specific custom fields
|
|
30
|
+
- **Markdown Formatting:** New `includeMarkdown` parameter returns beautifully formatted, human-readable card data
|
|
31
|
+
- **Inline Image Parsing:** Automatically detects and extracts images embedded in card descriptions
|
|
32
|
+
- **Comprehensive API Integration:** Single API call fetches all card data efficiently using optimized query parameters
|
|
33
|
+
- **Type Safety:** Added new TypeScript interfaces for all enhanced data structures
|
|
34
|
+
- **Human Parity:** Achieves complete parity with Trello UI - see everything a human sees
|
|
35
|
+
|
|
36
|
+
### 1.0.0
|
|
37
|
+
|
|
38
|
+
- Fixed MCP protocol compatibility by removing all console output that interfered with JSON-RPC communication
|
|
39
|
+
- Improved pnpx support - now works seamlessly with `pnpx @delorenj/mcp-server-trello`
|
|
40
|
+
- Updated installation docs to feature pnpx as the primary installation method
|
|
41
|
+
- Added mise installation instructions for convenient tool management
|
|
42
|
+
- Production-ready release with stable API
|
|
43
|
+
|
|
12
44
|
### 0.3.0
|
|
13
45
|
|
|
46
|
+
- Added multi-board support - all methods now accept optional `boardId` parameter (thanks @blackoutnet!)
|
|
47
|
+
- `TRELLO_BOARD_ID` environment variable is now optional and serves as default board
|
|
14
48
|
- Added board and workspace management capabilities:
|
|
15
49
|
- `list_boards` - List all boards the user has access to
|
|
16
50
|
- `set_active_board` - Set the active board for future operations
|
|
@@ -19,7 +53,8 @@ A Model Context Protocol (MCP) server that provides tools for interacting with T
|
|
|
19
53
|
- `list_boards_in_workspace` - List all boards in a specific workspace
|
|
20
54
|
- `get_active_board_info` - Get information about the currently active board
|
|
21
55
|
- Added persistent configuration storage to remember active board/workspace
|
|
22
|
-
- Improved error handling
|
|
56
|
+
- Improved error handling with MCP-specific error types
|
|
57
|
+
- Full backward compatibility maintained
|
|
23
58
|
|
|
24
59
|
### 0.2.1
|
|
25
60
|
|
|
@@ -47,34 +82,91 @@ A Model Context Protocol (MCP) server that provides tools for interacting with T
|
|
|
47
82
|
## Features
|
|
48
83
|
|
|
49
84
|
- **Full Trello Board Integration**: Interact with cards, lists, and board activities
|
|
85
|
+
- **🆕 Complete Card Data Extraction**: Fetch all card details including checklists, attachments, labels, members, and comments
|
|
50
86
|
- **Built-in Rate Limiting**: Respects Trello's API limits (300 requests/10s per API key, 100 requests/10s per token)
|
|
51
87
|
- **Type-Safe Implementation**: Written in TypeScript with comprehensive type definitions
|
|
52
88
|
- **Input Validation**: Robust validation for all API inputs
|
|
53
89
|
- **Error Handling**: Graceful error handling with informative messages
|
|
54
90
|
- **Dynamic Board Selection**: Switch between boards and workspaces without restarting
|
|
91
|
+
- **Markdown Formatting**: Export card data in human-readable markdown format
|
|
55
92
|
|
|
56
93
|
## Installation
|
|
57
94
|
|
|
58
|
-
###
|
|
95
|
+
### Quick Start with pnpx (Recommended)
|
|
59
96
|
|
|
60
|
-
The easiest way to
|
|
97
|
+
The easiest way to use the Trello MCP server is with `pnpx`, which doesn't require a global install:
|
|
61
98
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"mcpServers": {
|
|
102
|
+
"trello": {
|
|
103
|
+
"command": "pnpx",
|
|
104
|
+
"args": ["@delorenj/mcp-server-trello"],
|
|
105
|
+
"env": {
|
|
106
|
+
"TRELLO_API_KEY": "your-api-key",
|
|
107
|
+
"TRELLO_TOKEN": "your-token"
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}
|
|
66
112
|
```
|
|
67
113
|
|
|
68
|
-
|
|
114
|
+
Or if you're using mise:
|
|
115
|
+
|
|
116
|
+
```json
|
|
117
|
+
{
|
|
118
|
+
"mcpServers": {
|
|
119
|
+
"trello": {
|
|
120
|
+
"command": "mise",
|
|
121
|
+
"args": ["x", "--", "pnpx", "@delorenj/mcp-server-trello"],
|
|
122
|
+
"env": {
|
|
123
|
+
"TRELLO_API_KEY": "your-api-key",
|
|
124
|
+
"TRELLO_TOKEN": "your-token"
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
To connect a Trello workspace, you'll need to manually retrieve a `TRELLO_TOKEN` once per workspace. After setting up your Trello Power-Up, visit the following URL:
|
|
132
|
+
|
|
133
|
+
```
|
|
134
|
+
https://trello.com/1/authorize?expiration=never&name=YOUR_APP_NAME&scope=read,write&response_type=token&key=YOUR_API_KEY
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Replace:
|
|
138
|
+
|
|
139
|
+
* `YOUR_APP_NAME` with a name for your application (e.g., "My Trello Integration"). This name is shown to the user on the Trello authorization screen.
|
|
140
|
+
* `YOUR_API_KEY` with the API key for your Trello Power-Up
|
|
141
|
+
|
|
142
|
+
This will generate the token required for integration.
|
|
143
|
+
|
|
144
|
+
> [!NOTE]
|
|
145
|
+
> The `expiration=never` parameter creates a token that does not expire. For enhanced security, consider using `expiration=30days` and renewing the token periodically if your setup allows for it.
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
#### Don't have pnpm?
|
|
149
|
+
|
|
150
|
+
The simplest way to get `pnpm` (and thus `pnpx`) is through [mise](https://mise.jdx.dev/):
|
|
151
|
+
|
|
69
152
|
```bash
|
|
70
|
-
|
|
153
|
+
# Install mise (if you don't have it)
|
|
154
|
+
curl https://mise.run | sh
|
|
155
|
+
|
|
156
|
+
# Install pnpm with mise
|
|
157
|
+
mise install pnpm
|
|
71
158
|
```
|
|
72
159
|
|
|
73
|
-
|
|
160
|
+
### Installing via npm
|
|
161
|
+
|
|
162
|
+
If you prefer using npm directly:
|
|
163
|
+
|
|
74
164
|
```bash
|
|
75
|
-
|
|
165
|
+
npm install -g @delorenj/mcp-server-trello
|
|
76
166
|
```
|
|
77
167
|
|
|
168
|
+
Then use `mcp-server-trello` as the command in your MCP configuration.
|
|
169
|
+
|
|
78
170
|
### Installing via Smithery
|
|
79
171
|
|
|
80
172
|
To install Trello Server for Claude Desktop automatically via [Smithery](https://smithery.ai/server/@modelcontextprotocol/mcp-server-trello):
|
|
@@ -83,9 +175,27 @@ To install Trello Server for Claude Desktop automatically via [Smithery](https:/
|
|
|
83
175
|
npx -y @smithery/cli install @modelcontextprotocol/mcp-server-trello --client claude
|
|
84
176
|
```
|
|
85
177
|
|
|
86
|
-
###
|
|
178
|
+
### Docker Installation
|
|
179
|
+
|
|
180
|
+
For containerized environments:
|
|
181
|
+
|
|
182
|
+
1. Clone the repository:
|
|
183
|
+
|
|
184
|
+
```bash
|
|
185
|
+
git clone https://github.com/delorenj/mcp-server-trello
|
|
186
|
+
cd mcp-server-trello
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
2. Copy the environment template and fill in your Trello credentials:
|
|
190
|
+
|
|
191
|
+
```bash
|
|
192
|
+
cp .env.template .env
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
3. Build and run with Docker Compose:
|
|
196
|
+
|
|
87
197
|
```bash
|
|
88
|
-
|
|
198
|
+
docker compose up --build
|
|
89
199
|
```
|
|
90
200
|
|
|
91
201
|
## Configuration
|
|
@@ -99,7 +209,7 @@ The server can be configured using environment variables. Create a `.env` file i
|
|
|
99
209
|
TRELLO_API_KEY=your-api-key
|
|
100
210
|
TRELLO_TOKEN=your-token
|
|
101
211
|
|
|
102
|
-
#
|
|
212
|
+
# Optional (Deprecated): Default board ID (can be changed later using set_active_board)
|
|
103
213
|
TRELLO_BOARD_ID=your-board-id
|
|
104
214
|
|
|
105
215
|
# Optional: Initial workspace ID (can be changed later using set_active_workspace)
|
|
@@ -107,25 +217,32 @@ TRELLO_WORKSPACE_ID=your-workspace-id
|
|
|
107
217
|
```
|
|
108
218
|
|
|
109
219
|
You can get these values from:
|
|
110
|
-
|
|
220
|
+
|
|
221
|
+
- API Key: <https://trello.com/app-key>
|
|
111
222
|
- Token: Generate using your API key
|
|
112
|
-
- Board ID: Found in the board URL (e.g., https://trello.com/b/BOARD_ID/board-name)
|
|
223
|
+
- Board ID (optional, deprecated): Found in the board URL (e.g., <https://trello.com/b/BOARD_ID/board-name>)
|
|
113
224
|
- Workspace ID: Found in workspace settings or using `list_workspaces` tool
|
|
114
225
|
|
|
115
226
|
### Board and Workspace Management
|
|
116
227
|
|
|
117
|
-
Starting with version 0.3.0, the MCP server supports
|
|
228
|
+
Starting with version 0.3.0, the MCP server supports multiple ways to work with boards:
|
|
118
229
|
|
|
119
|
-
-
|
|
120
|
-
-
|
|
121
|
-
-
|
|
122
|
-
- Similarly, you can set and persist an active workspace using `set_active_workspace`
|
|
230
|
+
1. **Multi-board support**: All methods now accept an optional `boardId` parameter
|
|
231
|
+
- Omit `TRELLO_BOARD_ID` and provide `boardId` in each API call
|
|
232
|
+
- Set `TRELLO_BOARD_ID` as default and optionally override with `boardId` parameter
|
|
123
233
|
|
|
124
|
-
|
|
234
|
+
2. **Dynamic board selection**: Use workspace management tools
|
|
235
|
+
- The `TRELLO_BOARD_ID` in your `.env` file is used as the initial/default board ID
|
|
236
|
+
- You can change the active board at any time using the `set_active_board` tool
|
|
237
|
+
- The selected board persists between server restarts (stored in `~/.trello-mcp/config.json`)
|
|
238
|
+
- Similarly, you can set and persist an active workspace using `set_active_workspace`
|
|
239
|
+
|
|
240
|
+
This allows you to work with multiple boards and workspaces without restarting the server.
|
|
125
241
|
|
|
126
242
|
#### Example Workflow
|
|
127
243
|
|
|
128
244
|
1. Start by listing available boards:
|
|
245
|
+
|
|
129
246
|
```typescript
|
|
130
247
|
{
|
|
131
248
|
name: 'list_boards',
|
|
@@ -134,6 +251,7 @@ This allows you to work with multiple boards and workspaces without restarting t
|
|
|
134
251
|
```
|
|
135
252
|
|
|
136
253
|
2. Set your active board:
|
|
254
|
+
|
|
137
255
|
```typescript
|
|
138
256
|
{
|
|
139
257
|
name: 'set_active_board',
|
|
@@ -144,6 +262,7 @@ This allows you to work with multiple boards and workspaces without restarting t
|
|
|
144
262
|
```
|
|
145
263
|
|
|
146
264
|
3. List workspaces if needed:
|
|
265
|
+
|
|
147
266
|
```typescript
|
|
148
267
|
{
|
|
149
268
|
name: 'list_workspaces',
|
|
@@ -152,6 +271,7 @@ This allows you to work with multiple boards and workspaces without restarting t
|
|
|
152
271
|
```
|
|
153
272
|
|
|
154
273
|
4. Set active workspace if needed:
|
|
274
|
+
|
|
155
275
|
```typescript
|
|
156
276
|
{
|
|
157
277
|
name: 'set_active_workspace',
|
|
@@ -162,6 +282,7 @@ This allows you to work with multiple boards and workspaces without restarting t
|
|
|
162
282
|
```
|
|
163
283
|
|
|
164
284
|
5. Check current active board info:
|
|
285
|
+
|
|
165
286
|
```typescript
|
|
166
287
|
{
|
|
167
288
|
name: 'get_active_board_info',
|
|
@@ -169,8 +290,41 @@ This allows you to work with multiple boards and workspaces without restarting t
|
|
|
169
290
|
}
|
|
170
291
|
```
|
|
171
292
|
|
|
293
|
+
## Date Format Guidelines
|
|
294
|
+
|
|
295
|
+
When working with dates in the Trello MCP server, please note the different format requirements:
|
|
296
|
+
|
|
297
|
+
- **Due Date (`dueDate`)**: Accepts full ISO 8601 format with time (e.g., `2023-12-31T12:00:00Z`)
|
|
298
|
+
- **Start Date (`start`)**: Accepts date only in YYYY-MM-DD format (e.g., `2025-08-05`)
|
|
299
|
+
|
|
300
|
+
This distinction follows Trello's API conventions where start dates are day-based markers while due dates can include specific times.
|
|
301
|
+
|
|
172
302
|
## Available Tools
|
|
173
303
|
|
|
304
|
+
### get_card 🆕
|
|
305
|
+
|
|
306
|
+
Get comprehensive details of a specific Trello card with human-level parity.
|
|
307
|
+
|
|
308
|
+
```typescript
|
|
309
|
+
{
|
|
310
|
+
name: 'get_card',
|
|
311
|
+
arguments: {
|
|
312
|
+
cardId: string, // ID of the Trello card (short ID like 'FdhbArbK' or full ID)
|
|
313
|
+
includeMarkdown?: boolean // Return formatted markdown instead of JSON (default: false)
|
|
314
|
+
}
|
|
315
|
+
}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
**Returns:** Complete card data including:
|
|
319
|
+
- ✅ Checklists with item states and assignments
|
|
320
|
+
- 📎 Attachments with previews and metadata
|
|
321
|
+
- 🏷️ Labels with names and colors
|
|
322
|
+
- 👥 Assigned members
|
|
323
|
+
- 💬 Comments and activity
|
|
324
|
+
- 📊 Statistics (badges)
|
|
325
|
+
- 🎨 Cover images
|
|
326
|
+
- 📍 Board and list context
|
|
327
|
+
|
|
174
328
|
### get_cards_by_list_id
|
|
175
329
|
|
|
176
330
|
Fetch all cards from a specific list.
|
|
@@ -179,31 +333,35 @@ Fetch all cards from a specific list.
|
|
|
179
333
|
{
|
|
180
334
|
name: 'get_cards_by_list_id',
|
|
181
335
|
arguments: {
|
|
182
|
-
|
|
336
|
+
boardId?: string, // Optional: ID of the board (uses default if not provided)
|
|
337
|
+
listId: string // ID of the Trello list
|
|
183
338
|
}
|
|
184
339
|
}
|
|
185
340
|
```
|
|
186
341
|
|
|
187
342
|
### get_lists
|
|
188
343
|
|
|
189
|
-
Retrieve all lists from
|
|
344
|
+
Retrieve all lists from a board.
|
|
190
345
|
|
|
191
346
|
```typescript
|
|
192
347
|
{
|
|
193
348
|
name: 'get_lists',
|
|
194
|
-
arguments: {
|
|
349
|
+
arguments: {
|
|
350
|
+
boardId?: string // Optional: ID of the board (uses default if not provided)
|
|
351
|
+
}
|
|
195
352
|
}
|
|
196
353
|
```
|
|
197
354
|
|
|
198
355
|
### get_recent_activity
|
|
199
356
|
|
|
200
|
-
Fetch recent activity on
|
|
357
|
+
Fetch recent activity on a board.
|
|
201
358
|
|
|
202
359
|
```typescript
|
|
203
360
|
{
|
|
204
361
|
name: 'get_recent_activity',
|
|
205
362
|
arguments: {
|
|
206
|
-
|
|
363
|
+
boardId?: string, // Optional: ID of the board (uses default if not provided)
|
|
364
|
+
limit?: number // Optional: Number of activities to fetch (default: 10)
|
|
207
365
|
}
|
|
208
366
|
}
|
|
209
367
|
```
|
|
@@ -216,11 +374,13 @@ Add a new card to a specified list.
|
|
|
216
374
|
{
|
|
217
375
|
name: 'add_card_to_list',
|
|
218
376
|
arguments: {
|
|
377
|
+
boardId?: string, // Optional: ID of the board (uses default if not provided)
|
|
219
378
|
listId: string, // ID of the list to add the card to
|
|
220
379
|
name: string, // Name of the card
|
|
221
380
|
description?: string, // Optional: Description of the card
|
|
222
|
-
dueDate?: string,
|
|
223
|
-
|
|
381
|
+
dueDate?: string, // Optional: Due date (ISO 8601 format with time)
|
|
382
|
+
start?: string, // Optional: Start date (YYYY-MM-DD format, date only)
|
|
383
|
+
labels?: string[] // Optional: Array of label IDs
|
|
224
384
|
}
|
|
225
385
|
}
|
|
226
386
|
```
|
|
@@ -233,11 +393,14 @@ Update an existing card's details.
|
|
|
233
393
|
{
|
|
234
394
|
name: 'update_card_details',
|
|
235
395
|
arguments: {
|
|
396
|
+
boardId?: string, // Optional: ID of the board (uses default if not provided)
|
|
236
397
|
cardId: string, // ID of the card to update
|
|
237
398
|
name?: string, // Optional: New name for the card
|
|
238
399
|
description?: string, // Optional: New description
|
|
239
|
-
dueDate?: string,
|
|
240
|
-
|
|
400
|
+
dueDate?: string, // Optional: New due date (ISO 8601 format with time)
|
|
401
|
+
start?: string, // Optional: New start date (YYYY-MM-DD format, date only)
|
|
402
|
+
dueComplete?: boolean,// Optional: Mark the due date as complete (true) or incomplete (false)
|
|
403
|
+
labels?: string[] // Optional: New array of label IDs
|
|
241
404
|
}
|
|
242
405
|
}
|
|
243
406
|
```
|
|
@@ -250,20 +413,22 @@ Send a card to the archive.
|
|
|
250
413
|
{
|
|
251
414
|
name: 'archive_card',
|
|
252
415
|
arguments: {
|
|
253
|
-
|
|
416
|
+
boardId?: string, // Optional: ID of the board (uses default if not provided)
|
|
417
|
+
cardId: string // ID of the card to archive
|
|
254
418
|
}
|
|
255
419
|
}
|
|
256
420
|
```
|
|
257
421
|
|
|
258
422
|
### add_list_to_board
|
|
259
423
|
|
|
260
|
-
Add a new list to
|
|
424
|
+
Add a new list to a board.
|
|
261
425
|
|
|
262
426
|
```typescript
|
|
263
427
|
{
|
|
264
428
|
name: 'add_list_to_board',
|
|
265
429
|
arguments: {
|
|
266
|
-
|
|
430
|
+
boardId?: string, // Optional: ID of the board (uses default if not provided)
|
|
431
|
+
name: string // Name of the new list
|
|
267
432
|
}
|
|
268
433
|
}
|
|
269
434
|
```
|
|
@@ -276,7 +441,8 @@ Send a list to the archive.
|
|
|
276
441
|
{
|
|
277
442
|
name: 'archive_list',
|
|
278
443
|
arguments: {
|
|
279
|
-
|
|
444
|
+
boardId?: string, // Optional: ID of the board (uses default if not provided)
|
|
445
|
+
listId: string // ID of the list to archive
|
|
280
446
|
}
|
|
281
447
|
}
|
|
282
448
|
```
|
|
@@ -300,8 +466,9 @@ Move a card to a different list.
|
|
|
300
466
|
{
|
|
301
467
|
name: 'move_card',
|
|
302
468
|
arguments: {
|
|
303
|
-
|
|
304
|
-
|
|
469
|
+
boardId?: string, // Optional: ID of the target board (uses default if not provided)
|
|
470
|
+
cardId: string, // ID of the card to move
|
|
471
|
+
listId: string // ID of the target list
|
|
305
472
|
}
|
|
306
473
|
}
|
|
307
474
|
```
|
|
@@ -314,9 +481,10 @@ Attach an image to a card directly from a URL.
|
|
|
314
481
|
{
|
|
315
482
|
name: 'attach_image_to_card',
|
|
316
483
|
arguments: {
|
|
317
|
-
|
|
484
|
+
boardId?: string, // Optional: ID of the board (uses default if not provided)
|
|
485
|
+
cardId: string, // ID of the card to attach the image to
|
|
318
486
|
imageUrl: string, // URL of the image to attach
|
|
319
|
-
name?: string
|
|
487
|
+
name?: string // Optional: Name for the attachment (defaults to "Image Attachment")
|
|
320
488
|
}
|
|
321
489
|
}
|
|
322
490
|
```
|
|
@@ -393,6 +561,70 @@ Get information about the currently active board.
|
|
|
393
561
|
}
|
|
394
562
|
```
|
|
395
563
|
|
|
564
|
+
## Integration Examples
|
|
565
|
+
|
|
566
|
+
### 🎨 Pairing with Ideogram MCP Server
|
|
567
|
+
|
|
568
|
+
The Trello MCP server pairs beautifully with [@flowluap/ideogram-mcp-server](https://github.com/flowluap/ideogram-mcp-server) for AI-powered visual content creation. Generate images with Ideogram and attach them directly to your Trello cards!
|
|
569
|
+
|
|
570
|
+

|
|
571
|
+
|
|
572
|
+
#### Example Workflow
|
|
573
|
+
|
|
574
|
+
1. **Generate an image with Ideogram:**
|
|
575
|
+
```typescript
|
|
576
|
+
// Using ideogram-mcp-server
|
|
577
|
+
{
|
|
578
|
+
name: 'generate_image',
|
|
579
|
+
arguments: {
|
|
580
|
+
prompt: "A futuristic dashboard design with neon accents",
|
|
581
|
+
aspect_ratio: "16:9"
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
// Returns: { image_url: "https://..." }
|
|
585
|
+
```
|
|
586
|
+
|
|
587
|
+
2. **Attach the generated image to a Trello card:**
|
|
588
|
+
```typescript
|
|
589
|
+
// Using trello-mcp-server
|
|
590
|
+
{
|
|
591
|
+
name: 'attach_image_to_card',
|
|
592
|
+
arguments: {
|
|
593
|
+
cardId: "your-card-id",
|
|
594
|
+
imageUrl: "https://...", // URL from Ideogram
|
|
595
|
+
name: "Dashboard Mockup v1"
|
|
596
|
+
}
|
|
597
|
+
}
|
|
598
|
+
```
|
|
599
|
+
|
|
600
|
+
#### Setting up both servers
|
|
601
|
+
|
|
602
|
+
Add both servers to your Claude Desktop configuration:
|
|
603
|
+
|
|
604
|
+
```json
|
|
605
|
+
{
|
|
606
|
+
"mcpServers": {
|
|
607
|
+
"trello": {
|
|
608
|
+
"command": "pnpx",
|
|
609
|
+
"args": ["@delorenj/mcp-server-trello"],
|
|
610
|
+
"env": {
|
|
611
|
+
"TRELLO_API_KEY": "your-trello-api-key",
|
|
612
|
+
"TRELLO_TOKEN": "your-trello-token"
|
|
613
|
+
}
|
|
614
|
+
},
|
|
615
|
+
"ideogram": {
|
|
616
|
+
"command": "pnpx",
|
|
617
|
+
"args": ["@flowluap/ideogram-mcp-server"],
|
|
618
|
+
"env": {
|
|
619
|
+
"IDEOGRAM_API_KEY": "your-ideogram-api-key"
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
}
|
|
624
|
+
```
|
|
625
|
+
|
|
626
|
+
Now you can seamlessly create visual content and organize it in Trello, all within Claude!
|
|
627
|
+
|
|
396
628
|
## Rate Limiting
|
|
397
629
|
|
|
398
630
|
The server implements a token bucket algorithm for rate limiting to comply with Trello's API limits:
|
|
@@ -440,7 +672,6 @@ npm install
|
|
|
440
672
|
npm run build
|
|
441
673
|
```
|
|
442
674
|
|
|
443
|
-
|
|
444
675
|
## Running evals
|
|
445
676
|
|
|
446
677
|
The evals package loads an mcp client that then runs the index.ts file, so there is no need to rebuild between tests. You can load environment variables by prefixing the npx command. Full documentation can be found [here](https://www.mcpevals.io/docs).
|
|
@@ -448,6 +679,7 @@ The evals package loads an mcp client that then runs the index.ts file, so there
|
|
|
448
679
|
```bash
|
|
449
680
|
OPENAI_API_KEY=your-key npx mcp-eval src/evals/evals.ts src/index.ts
|
|
450
681
|
```
|
|
682
|
+
|
|
451
683
|
## Contributing
|
|
452
684
|
|
|
453
685
|
Contributions are welcome!
|
package/build/evals/evals.d.ts
CHANGED
package/build/evals/evals.js
CHANGED
|
@@ -1,50 +1,72 @@
|
|
|
1
1
|
//evals.ts
|
|
2
|
-
import { openai } from
|
|
3
|
-
import { grade } from
|
|
2
|
+
import { openai } from '@ai-sdk/openai';
|
|
3
|
+
import { grade } from 'mcp-evals';
|
|
4
4
|
const get_cards_by_list_idEval = {
|
|
5
5
|
name: 'get_cards_by_list_id Tool Evaluation',
|
|
6
6
|
description: 'Evaluates the get_cards_by_list_id tool functionality',
|
|
7
7
|
run: async () => {
|
|
8
|
-
const result = await grade(openai(
|
|
8
|
+
const result = await grade(openai('gpt-4'), 'Can you fetch all cards from the Trello list with ID abc123?');
|
|
9
9
|
return JSON.parse(result);
|
|
10
|
-
}
|
|
10
|
+
},
|
|
11
11
|
};
|
|
12
12
|
const get_listsEval = {
|
|
13
13
|
name: 'get_lists Tool Evaluation',
|
|
14
14
|
description: 'Evaluates the get_lists tool by retrieving all lists from a specified board',
|
|
15
15
|
run: async () => {
|
|
16
|
-
const result = await grade(openai(
|
|
16
|
+
const result = await grade(openai('gpt-4'), 'Please retrieve all lists from the board with ID 12345 and provide their names.');
|
|
17
17
|
return JSON.parse(result);
|
|
18
|
-
}
|
|
18
|
+
},
|
|
19
19
|
};
|
|
20
20
|
const get_recent_activityEvalFunction = {
|
|
21
21
|
name: 'get_recent_activity Tool Evaluation',
|
|
22
22
|
description: 'Evaluates the ability to fetch recent activity on the Trello board',
|
|
23
23
|
run: async () => {
|
|
24
|
-
const result = await grade(openai(
|
|
24
|
+
const result = await grade(openai('gpt-4'), 'Fetch the recent activity on the Trello board, limit it to 5 items');
|
|
25
25
|
return JSON.parse(result);
|
|
26
|
-
}
|
|
26
|
+
},
|
|
27
27
|
};
|
|
28
28
|
const add_card_to_listEval = {
|
|
29
29
|
name: 'add_card_to_listEval',
|
|
30
30
|
description: 'Evaluates the add_card_to_list tool',
|
|
31
31
|
run: async () => {
|
|
32
|
-
const result = await grade(openai(
|
|
32
|
+
const result = await grade(openai('gpt-4'), "Please add a new card named 'Demo Card' to the list with ID 'abc123', with a description of 'This is a test card', due date '2023-12-31T12:00:00Z', start date '2025-08-05', and a label 'priority'.");
|
|
33
33
|
return JSON.parse(result);
|
|
34
|
-
}
|
|
34
|
+
},
|
|
35
35
|
};
|
|
36
36
|
const update_card_detailsEval = {
|
|
37
37
|
name: 'update_card_details Evaluation',
|
|
38
38
|
description: 'Evaluates the update_card_details tool functionality',
|
|
39
39
|
run: async () => {
|
|
40
|
-
const result = await grade(openai(
|
|
40
|
+
const result = await grade(openai('gpt-4'), "Please update the card with ID 'abc123' to have the name 'Updated Card Name', the description 'New description for the card', a due date of '2024-01-01T10:00:00Z', start date '2025-08-05', and labels ['priority','review'].");
|
|
41
41
|
return JSON.parse(result);
|
|
42
|
-
}
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
const mark_card_completeEval = {
|
|
45
|
+
name: 'mark_card_complete Evaluation',
|
|
46
|
+
description: 'Evaluates the ability to mark a card as complete using dueComplete',
|
|
47
|
+
run: async () => {
|
|
48
|
+
const result = await grade(openai('gpt-4'), "Please mark the card with ID 'xyz789' as complete by setting dueComplete to true.");
|
|
49
|
+
return JSON.parse(result);
|
|
50
|
+
},
|
|
43
51
|
};
|
|
44
52
|
const config = {
|
|
45
|
-
model: openai(
|
|
46
|
-
evals: [
|
|
53
|
+
model: openai('gpt-4'),
|
|
54
|
+
evals: [
|
|
55
|
+
get_cards_by_list_idEval,
|
|
56
|
+
get_listsEval,
|
|
57
|
+
get_recent_activityEvalFunction,
|
|
58
|
+
add_card_to_listEval,
|
|
59
|
+
update_card_detailsEval,
|
|
60
|
+
mark_card_completeEval,
|
|
61
|
+
],
|
|
47
62
|
};
|
|
48
63
|
export default config;
|
|
49
|
-
export const evals = [
|
|
64
|
+
export const evals = [
|
|
65
|
+
get_cards_by_list_idEval,
|
|
66
|
+
get_listsEval,
|
|
67
|
+
get_recent_activityEvalFunction,
|
|
68
|
+
add_card_to_listEval,
|
|
69
|
+
update_card_detailsEval,
|
|
70
|
+
mark_card_completeEval,
|
|
71
|
+
];
|
|
50
72
|
//# sourceMappingURL=evals.js.map
|
package/build/evals/evals.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"evals.js","sourceRoot":"","sources":["../../src/evals/evals.ts"],"names":[],"mappings":"AAAA,UAAU;AAGV,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAgB,MAAM,WAAW,CAAC;AAEhD,MAAM,wBAAwB,GAAiB;
|
|
1
|
+
{"version":3,"file":"evals.js","sourceRoot":"","sources":["../../src/evals/evals.ts"],"names":[],"mappings":"AAAA,UAAU;AAGV,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,KAAK,EAAgB,MAAM,WAAW,CAAC;AAEhD,MAAM,wBAAwB,GAAiB;IAC7C,IAAI,EAAE,sCAAsC;IAC5C,WAAW,EAAE,uDAAuD;IACpE,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,8DAA8D,CAC/D,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,aAAa,GAAiB;IAClC,IAAI,EAAE,2BAA2B;IACjC,WAAW,EAAE,6EAA6E;IAC1F,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,iFAAiF,CAClF,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,+BAA+B,GAAiB;IACpD,IAAI,EAAE,qCAAqC;IAC3C,WAAW,EAAE,oEAAoE;IACjF,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,oEAAoE,CACrE,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,oBAAoB,GAAiB;IACzC,IAAI,EAAE,sBAAsB;IAC5B,WAAW,EAAE,qCAAqC;IAClD,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,sMAAsM,CACvM,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,uBAAuB,GAAiB;IAC5C,IAAI,EAAE,gCAAgC;IACtC,WAAW,EAAE,sDAAsD;IACnE,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,gOAAgO,CACjO,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,sBAAsB,GAAiB;IAC3C,IAAI,EAAE,+BAA+B;IACrC,WAAW,EAAE,oEAAoE;IACjF,GAAG,EAAE,KAAK,IAAI,EAAE;QACd,MAAM,MAAM,GAAG,MAAM,KAAK,CACxB,MAAM,CAAC,OAAO,CAAC,EACf,mFAAmF,CACpF,CAAC;QACF,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;CACF,CAAC;AAEF,MAAM,MAAM,GAAe;IACzB,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC;IACtB,KAAK,EAAE;QACL,wBAAwB;QACxB,aAAa;QACb,+BAA+B;QAC/B,oBAAoB;QACpB,uBAAuB;QACvB,sBAAsB;KACvB;CACF,CAAC;AAEF,eAAe,MAAM,CAAC;AAEtB,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,wBAAwB;IACxB,aAAa;IACb,+BAA+B;IAC/B,oBAAoB;IACpB,uBAAuB;IACvB,sBAAsB;CACvB,CAAC"}
|